草庐IT

指向类的 C++ 指针

全部标签

c++ - 将 nullptr 传递给可变模板指针

我目前有以下功能:templatevoidGet(T*out,Args*...other);templatevoidGet(T*out);templatevoidGet(int*out);templatevoidGet(int64*out);templatevoidGet(double*out);templatevoidGet(char**out);templatevoidGet(void**out);调用使用:Get(&i,&t,&f);i为int,t为char*和f作为double。如果我想传递一个空指针,这非常有用,但有一个异常(exception)。Get(&i,nullptr

c++ - 引用指向哪里?

我不确定我是否理解了堆栈。我有以下运算符(operator)重载复数a和b(a=3+5i和b=2+i)。structcomplex{intx;inty;};complex&operator+=(complex&a,constcomplexb){a.x=a.x+b.x;a.y=a.y+b.y;returna;}现在我想知道返回值的引用指向哪里。我认为在主堆栈框架中有一个内存区域用于a=a.x和a.y的64位,因为a.x/a.y是int类型。而返回值a在operator+=stack-frame中指向这个“a”-内存区域。我想知道“a”-memory-area是什么样子以及它是类型复杂存储

c++ - 动态 boost 线程运行存储在具有共享指针的 vector 中的对象的方法

我有一个摄像头类,它是网络摄像头的抽象。该类有一个方法rxImageThread(),它本质上是一个图像服务器。我想在n个线程中为n个摄像机运行n个服务器,其中n是动态设置的(来自配置文件)。相机对象存储在一个vector中:std::vector>cameras;我在循环中创建相机对象:cameras.push_back(boost::shared_ptr(newcamera(ip,controlPort,dataPort,imagePort,name)));我有一个vector来存储线程:std::vector>threads;在一个循环中,我想让每个摄像头的rxImageThre

c++ - 返回 vector 元素的拷贝与返回指向 vector 元素的指针

我有一个这样的对象:classNode{floatx,y,z;size_ttag;boolisFree;std::vectorconnections;//Usually~10-100inlength};只是为了让您了解尺寸。这些节点对象的列表包含数百万个实例,我将其称为std::vectormasterNodes.我在其他地方有一个函数返回这些对象的容器,比如这个:std::vectorfind_nodes(){std::vectornodes;//copysomeelementsfrommasterNodesthatmeetourconditionsreturnnodes;}我的问题

c++ - 指向函数的模板指针的部分模板特化

考虑以下抽象订阅类:templateclassSubscription{public:virtual~Subscription(){}virtualboolhandle(constTMessage&)=0;};在某些情况下,如果单独一个类可以多次实现这个抽象类会很方便-即使对于同一个TMessage-和不强制继承。为了实现这一点,我使用模板指针以下列方式运行:templateclassInvoker:publicSubscription{public:Invoker(TCaller*caller):m_caller(*caller){}virtualboolhandle(constTM

c++ - LLVM IR 中的一切都是指针吗?

我遍历程序的全局变量并对它们的类​​型感兴趣。对于测试,例如:#includeinti=0;intmain(){printf("lala%d\n",i);return0;}我得到的输出是:Globals:iType:14//14==>POINTERTYPEID!StackLock:Stack1FunctionArgument:i32*@i我的代码:for(Module::global_iteratorI=M.global_begin(),E=M.global_end();I!=E;++I){std::coutgetName().str()getType()->getTypeID()ge

c++ - 为什么下面的runner指针没有变为null?

为什么runner指针没有改成null?Node*runner=head->next;Node*reversedList=head;reversedList->next=nullptr;但在下面,它确实变为nullNode*reversedList=head;reversedList->next=nullptr;Node*runner=head->next; 最佳答案 在你发出下面的声明之后Node*runner=head->next;'runner'指向由'next'指向的地址内存(假设它是地址0x6543)。(head->nex

c++ - GCC 无法优化涉及成员函数指针的委托(delegate) lambda 函数

我使用GCC4.9.2和clang3.6.0编译了以下c++14代码。我使用了-O3标志。#includestructS{inta;intA()const{returna;}};templateintFunc(F&&f,Args&&...args){returnf(std::forward(args)...);}usingPtrA=int(S::*)()const;intF(Sconst&s,PtrAptr){return(s.*ptr)()*5;}intp(Sconst&s){returns.A()*5;}intP1(Sconst&s){returnFunc(&F,s,&S::A);

c++ - const 指针和 const 数组的输出

当我们有两个运算符用于输出对象和这些对象的数组,并尝试输出常量对象数组时,就会涉及到对象运算符。有没有办法强制数组的运算符与常量对象的c数组一起使用?示例代码:#include#includeusingstd::size_t;namespacenm{structC{inti;};templateusingc_c_array=C[N];inlinestd::ostream&operatorinlinestd::ostream&operatorconst&){returnlhs输出:1211此外,在我的例子中,2运算符使用1作为输出。 最佳答案

c++ - Cereal 不支持原始指针

编辑:问题标题是基于对我得到的编译器错误的深刻误解。我(愚蠢地)假设错误是,我试图反序列化到我在函数内部声明的对象。这是完全错误的。我自己没有做足够的调试工作,否则我本可以找出问题所在。所以标题很误导,我改了。感谢АндрейБеньковский的帮助。我正在使用cereal在我的引擎中为3D模型编写序列化函数,事实证明它非常高效且易于使用。到目前为止,当我测试(反)序列化一个简单的网格时,一切都很好。但现在我正在尝试反序列化另一个类,但遇到了一个我没有得到的问题。voidloadFile(std::stringfilepath){DescriptionFilefile;{ifstr